package com.ribbon.serviceribbon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
 * 在微服务架构中，业务都会被拆分成一个独立的服务，服务与服务的通讯是基于http restful的。
 * Spring cloud有两种服务调用方式，一种是ribbon+restTemplate，另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。
 *
 * ribbon是一个负载均衡客户端，可以通过他来负载均衡调用eurake客户端，可以很好的控制http和tcp的一些行为。
 * Feign默认集成了ribbon。
 * 断路器打开后，可用避免连锁故障，当eurake客户端无法访问或出现问题时，fallback方法可以直接返回一个固定值
 * */
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient//向服务中心注册
@EnableHystrix//开启Hystrix断路器
public class ServiceRibbonApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceRibbonApplication.class, args);
    }

    @Bean
    @LoadBalanced//表明这个restRemplate开启负载均衡的功能
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

}
